package ooo.reindeer.commons.utils.limit;

import java.io.Closeable;
import java.util.TimerTask;

/**
 * 速度限制器
 *
 * @ClassName ISpeedLimit
 * @Author songbailin
 * @Date 2020/5/6 16:20
 * @Version 1.0
 * @Description TODO
 */
public interface ISpeedLimit {
    /**
     * 阻塞限制
     */
    void blockLimit();

    /**
     * 取消
     */
    void cancel();

    /**
     * 检查限制
     *
     * @return boolean
     */
    boolean checkLimit();

    /**
     * 获得周期
     *
     * @return long
     */
    long getCycle();

    /**
     * 获得最高速度
     *
     * @return long
     */
    long getMaxSpeed();

    /**
     * 得到恢复器
     *
     * @return {@link TimerTask}
     */
    TimerTask getRestorer();

    /**
     * 的简历
     */
    void resume();

    /**
     * 设置周期
     *
     * @param cycle
     *         周期
     */
    void setCycle(long cycle);

    /**
     * 设置限制
     *
     * @param speed
     *         速度
     * @param cycle
     *         周期
     */
    void setLimit(long speed, long cycle);

    /**
     * 设置最大速度
     *
     * @param speed
     *         速度
     */
    void setMaxSpeed(long speed);

    void shutdown();
}
